// 对于 axios 二次封装的目的
// 目的一: 利用 axios 请求拦截器 和 响应拦截器功能
// 目的二: 请求拦截器, 一般可以在请求头中携带公共的参数: token
// 目的三: 响应拦截器: 可以解构服务器返回的数据, 处理 http 网络错误

import axios from "axios"

import { ElMessage } from "element-plus"

//利用axios.create方法创建一个axios实例:可以设置基础路径、超时时间的设置
const request = axios.create({
  baseURL: '/api', // 请求的基础路径的设置
  timeout: 10000 // 超时的时间的设置,超出五秒请求就是失败的
})

// 请求拦截器
request.interceptors.request.use((config) => {
  // config 请求拦截器回调注入的配置对象, 里面有 baseUrl 和 请求方式 和 超时时间 和 header 属性 (最重要)
  // 可以通过请求头携带公共参数, 比如 token
  return config
})
// 响应拦截器
request.interceptors.response.use((response) => {
  // 成功 -- 一般解构出 data
  return response.data
},(error) => {
  // 失败 -- 一般处理 http 网络错误
  let status = error.response.status
  switch(status) {
    case 404:
      //错误提示信息
      ElMessage({
            type: 'error',
            message: '请求失败路径出现问题'
      })
      break;
    case 500 | 501 | 502 | 503 | 504 | 505:
      ElMessage({
            type: 'error',
            message: '服务器挂了'
      })
      break;
    case 401:
      ElMessage({
            type: 'error',
            message: '参数有误'
      })
      break;
  }
  return Promise.reject(new Error(error.message))
})
// 务必对外暴露 axios 实例对象
export default request